/***
 * 路由工具集
 */
const tools = loader("fun");
const pars_midd = loader("pars_midd")
module.exports={
    /***
     * @param str
     * @param req
     * @param data
     * @returns {{data: {}, status: boolean}}
     * 判断url是否为路由参数
     * 如果有路由参数则自动生成识别这个路由的正则
     * 并把正则返回
     */
    isRouter(str,req,data={}){
        let url = str.replace(/\//g,"<_GEM_>");
        let router = global.router[req.method.toLowerCase()];
        !router && (router={})
        req.$route_parameter={};
        let bool = Object.keys(router).some(value => {
            if(router[value].regular.test(url)){
                router[value].replace
                    .reduce((par,e)=>par.replace(e,""),str)
                    .split("/").filter(res=>res)
                    .forEach((e,index) => {
                        req[router[value].parameter[index]]=e;
                        req.$route_parameter[router[value].parameter[index]]=e;
                    });
                //把路由参数解析出来
                data=router[value];
                return true;
            }
        });
        return {
            status:bool,
            data
        }
    },

    /***
     * 从路由集合中获取路由
     */
    getRoute(req){
        let route = global.route[req.method.toLowerCase()] && global.route[req.method.toLowerCase()][req._url];
        route || (route = global.route['any'][req._url])
        //如果有路由就正常返回，没有路由
        if(!route){
            //判断是不是有路由参数的路由
            route = this.isRouter(req._url,req);
            if(route.status){
                //这是一个路由参数
                return route.data;
            }
            //判断一下是不是某个文件的地址
            req.filepath = tools.isFile_Path(req._url);
            if(req.filepath){
                //读取配置的资源管理模块
                return {
                    controller:loader(global.gem_config.resourcesToRead.path) || (()=>{
                        console.log("资源读取模块没找到，请检查配置文件")}),
                    midd:pars_midd(global.gem_config.resourcesToRead.midd),
                }
            }
            return {
                controller: loader(global.gem_config[404].path) || (()=>{
                    console.log("404模块没找到，请检查配置文件")}),
                midd:pars_midd(global.gem_config[404].midd)
            }
        }
        return route;
    }
}